import router from "@/router";
import { useUserStore, usePermissionStore } from "@/store";
import NProgress from 'nprogress' // progress bar
import type { RouteRecordRaw } from "vue-router";
//import 'nprogress/nprogress.css' // progress bar style


export function setupPermission(){
    // 白名单路由
    //const whiteList = ['/login'];


    router.beforeEach(async (to, from, next) => {
        NProgress.start();
        const permissionStore = usePermissionStore();

        // ✅ 不再用 isDynamicAdded 来跳过，而是用它来判断是否已添加过
        if (!permissionStore.isDynamicAdded) {
            try {
            const accessRoutes = await permissionStore.generateRoutes();
            accessRoutes.forEach((route: RouteRecordRaw) => {
                router.addRoute(route);
            });
            permissionStore.setDynamicAdded(true);

            // ✅ 关键：添加完路由后，重新导航到当前路径
            next({ ...to, replace: true });
            return;
            } catch (error) {
            console.error('路由生成失败:', error);
            next('/');
            } finally {
            NProgress.done();
            }
        } else {
            // ✅ 已添加过路由，直接放行
            if (to.matched.length > 0) {
            next();
            } else {
            next('/404');
            }
            NProgress.done();
        }
    });




    // router.beforeEach(async (to, from, next) => {
    //     NProgress.start()
    //     const permissionStore = usePermissionStore();

    //     // 1. 如果已经动态添加过路由，直接放行
    //     if(permissionStore.isDynamicAdded){
    //         // 检查是否有匹配的路由
    //         if(to.matched.length > 0){
    //             next();
    //         } else {
    //             // 如果没有匹配的路由，重定向到404
    //             next('/404');
    //         }
    //         NProgress.done();
    //         return;
    //     }
    //     try{
    //         // 2. 生成路由（由于没有登录逻辑，这里应该返回默认路由）
    //         const accessRoutes = await permissionStore.generateRoutes();

    //         // 3. 添加动态路由, 确保有路由可添加，避免空数组导致的问题
    //         if (accessRoutes && accessRoutes.length > 0) {
    //             accessRoutes.forEach((route:RouteRecordRaw) => {
    //                 router.addRoute(route);
    //             });
    //             console.log(accessRoutes, 'accessRoutes')
    //         } else {
    //             console.warn('没有生成任何路由');
    //         }
    //         // 4. 标记已添加，防止重复
    //         permissionStore.setDynamicAdded(true)

    //         // 5. 关键修复：检查当前路由是否存在，如果不存在，先导航到首页
    //         // 使用router.resolve判断路由是否存在
    //         const routeExists = router.resolve(to).matched.length > 0;
    //         if(routeExists){
    //             // 路由存在，正常导航
    //             next({ ...to, replace: true });
    //         } else {
    //             // 路由不存在，导航到首页
    //             next('/');
    //         }
            
    //     } catch (error) {
    //         console.error('路由生成失败:', error);
    //         // 出错时的 fallback
    //         permissionStore.setDynamicAdded(true); // 避免一直重试
    //         next('/');
    //     } finally {
    //         NProgress.done();
    //     }
    // })





    // router.beforeEach(async (to, from, next) => {
    //     // 设置页面标题
    //     // document.title = to.meta.title as string || 'rockai-web';
    //     NProgress.start();
    //     const hasToken = localStorage.getItem('accessToken');
    //     if(hasToken){
    //         if(to.path === '/login'){
    //             // 如果已经登录，跳转到首页
    //             next({ path: '/'});
    //             NProgress.done();
    //         } else {
    //             const userStore = useUserStore();
    //             const hasRoles = userStore.user.roles && userStore.user.roles.length > 0;
    //             if(hasRoles){
    //                 // 未匹配到任何路由，重定向到 404 页面
    //                 if(to.matched.length === 0){
    //                     from.name ? next({ name: from.name }) : next('/404');
    //                 } else {
    //                     next();
    //                 }
    //             } else {
    //                 const permissionStore = usePermissionStore();
    //                 try {
    //                     const { roles } = await userStore.getUserInfo();
    //                     const accessRoutes = await permissionStore.generateRoutes(roles);
    //                     accessRoutes.forEach((route:RouteRecordRaw) => {
    //                         router.addRoute(route);
    //                     });
    //                 } catch (error) {
    //                     // 获取用户信息失败，重置 token 并跳转到登录页
    //                     await userStore.resetToken();
    //                     next(`/login?redirect=${to.path}`);
    //                     NProgress.done();
    //                 }
    //             }
    //         }
    //     } else {
    //         // 没有 token
    //         if(whiteList.indexOf(to.path) !== -1){
    //             // 在免登录白名单，直接进入
    //             next();
    //         } else {
    //             // 其他没有访问权限的页面全部重定向到登录页
    //             next(`/login?redirect=${to.path}`);
    //             NProgress.done();
    //         }
    //     }
    // });

    router.afterEach(() => {
        // finish progress bar
        NProgress.done();
    });
}